package main

import "fmt"

// 递归是一种函数调用自身的机制，它是一种解决问题的有效方法。
// 递归函数的定义一般遵循以下几个步骤：
// 1. 递归函数必须有一个基线条件，即递归结束的条件。
// 2. 递归函数必须要有一个递归条件，即递归调用的条件。
// 3. 递归函数必须要有一个递归调用，即函数调用自身。

// 以下是一个简单的递归函数，它计算阶乘：
func factorial(n int) int {
	if n == 0 {
		return 1
	}
	return n * factorial(n-1)
}

// 斐波那契数列是一个经典的递归问题，它的定义如下：
// 斐波那契数列由0和1开始，之后的每一个数都是前两个数的和。

func fibonacci(n int) int {
	if n == 0 {
		return 0
	}
	if n == 1 {
		return 1	
	}
	return fibonacci(n-1) + fibonacci(n-2)
}

func main() {
	result := factorial(5)
	fmt.Println(result) // 120

	result = fibonacci(10)
	fmt.Println(result) // 55
}